package product;

import java.io.File;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Vector;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;

public class MethodClass {

	HashMap<String, TempData> map;
	Connection con = null;
	PreparedStatement pstmt = null;

	public MethodClass() {}//아무것도 안하는 기본 생성자

	public void setDB(Connection c){
		this.con = c; // 로그인 클래스에 있는 커넥션 객체 가져올꺼야
	}

	//table 0열부터3열까지 내용 가운데 정렬
	public void tableCellCenter(JTable table){
		DefaultTableCellRenderer dtcr = new DefaultTableCellRenderer();
		dtcr.setHorizontalAlignment(SwingConstants.CENTER);
		for(int i=0;i<=3;i++){
			table.getColumnModel().getColumn(i).setCellRenderer(dtcr);
		}
	}

	//table 4열부터7열까지 내용 가운데 정렬
	public void tableCellRight(JTable table){
		DefaultTableCellRenderer dtcr = new DefaultTableCellRenderer();
		dtcr.setHorizontalAlignment(SwingConstants.RIGHT);
		for(int i=4;i<=7;i++){
			table.getColumnModel().getColumn(i).setCellRenderer(dtcr);
		}
	}

	public void sendMail() throws EmailException{ //이메일 보낼때

		SimpleEmail email = new SimpleEmail(); // 선언을 한다
		email.setCharset("UTF-8");     // 인코딩을 설정한다.
		email.setHostName("smtp.gmail.com"); //사용할 메일서버 선택
		email.setSmtpPort(456);              //사용할 포트번호 설정
		email.setSSL(true);                  
		email.setTLS(true);

		//System.out.println("1");

		email.setFrom("intotheji@gmail.com", "5dols"); //보내는 사람

		email.setAuthentication("intotheji", "dhqk8626"); //SMTP 인증이 필요할 경우(없으면 지워버린다.)
		email.addTo("intotheji@gmail.com", "5dolsstory"); //받는사람
		email.setSubject("메일의 제목입니다."); //메일 제목
		email.setMsg("메일의 내용입니다."); //메일 내용


		email.send(); //메일 발송
		System.out.println("1");
		System.out.println("전송");
	}

	/*
	public void modelRemove(DefaultTableModel model){  //모델의 모든 행 제거
		if(model.getRowCount() > 0){
			for(int i=model.getRowCount()-1; i>-1; i--){
				model.removeRow(i);
			}
		}
	}
	 */

	public void setD(HashMap<String, TempData> map){
		this.map = map; // admin에 있는 맵을 저장한다.
	}

	//벡터에 값 추가
	public void vecAdd(TempData td, DefaultTableModel model, int count, int count2){

		Vector<String> vec = new Vector<String>();
		DecimalFormat df = new DecimalFormat("#,###");
		vec.add(td.getIndex());//사번
		vec.add(td.getTeam());
		vec.add(td.getLevel());//직책
		vec.add(td.getName()); //성명
		vec.add(df.format(td.getPay())+"원"); //일당
		vec.add(Integer.toString(count)+"일");//출근일수     
		vec.add(Integer.toString(count2)+"일");//유급일수
		vec.add(df.format(td.getPay()*(count))+"원");//일당 * 출근일수
		td.setAmount(td.getPay()*(count));//일당 셋팅
		model.addRow(vec);
	}

	public void ExcelSave(JTable table){//엑셀 저장하는 메소드(매개변수 JTable)
		try {
			JFileChooser jfc = new JFileChooser();
			int yn = jfc.showSaveDialog(null);
			if(yn==0){
				String fileName = jfc.getSelectedFile().toString();//저장경로 받기
				WritableWorkbook workbook = Workbook.createWorkbook(new File(fileName+".xls"));

				WritableSheet s1 = workbook.createSheet("sheet 0",  0); //엑셀에 시트생성
				//WritableSheet s2 = workbook.createSheet("sheet 1",  1); //엑셀에 시트생성

				for(int i=0;i<table.getColumnCount();i++){//열 제목 추가
					Label label = new Label(i,0,table.getColumnName(i));
					s1.addCell(label);
				}

				// 데이터 저장
				for(int i=0;i<table.getRowCount();i++){//행 추가
					for(int j=0;j<table.getColumnCount();j++){
						Label label = new Label(j,i+1, (String)table.getValueAt(i, j)); //라벨객체 생성.
						s1.addCell(label);
					}
				}

				//				// 두번째 시트 저장 부분
				//				Label label = new Label(0,0,"사원 번호");
				//				s2.addCell(label);
				//				
				//				Label label2 = new Label(1,0,"출근일");
				//				s2.addCell(label2);



				JOptionPane.showMessageDialog(null, fileName+".xls 에 저장되었습니다");//알림창
				workbook.write(); //파일로 쓰기
				workbook.close(); //닫기
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

	public void ExcelLoad(){//엑셀 불러와서 모델에 저장하기
		try {
			//엑셀 파일 선택하기

			JFileChooser jfc = new JFileChooser();
			int yn = jfc.showOpenDialog(null);
			if(yn == 0){ // 파일 선택했으면 
				String fileName = jfc.getSelectedFile().toString();
				Workbook wb = Workbook.getWorkbook(new File(fileName)); //워크북 가져오기

				Sheet sheet = wb.getSheet(0); // 첫번째 시트
				//Sheet sheet2 = wb.getSheet(1); // 두번째 시트

				//modelRemove(model); //모델 행에 있는 데이터 초기화

				System.out.println("행 몇개니 : "+sheet.getRows());

				int row = 1;

				//정한 시트의 열의 수 만큼 1번째 행부터 jtable 내용에 뿌려주기
				for(int i=1;i<sheet.getRows();i++){
					String sql = "insert into profit (p_no, p_year, p_01, p_02, p_03, " +
							"p_04, p_05, p_06, p_07, p_08, p_09, p_10, p_11, p_12) values " +
							"(pf_serial.nextval, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; 
					pstmt = con.prepareStatement(sql);	
					
					// 한 행의 컬럼 수만큼 저장 
					for(int j=0;j<sheet.getColumns();j++){						
						Cell cell = sheet.getCell(j,i); // (1,0) ~ (1,컬럼수)											
						pstmt.setString(j+1, cell.getContents());
					}
					
					pstmt.executeUpdate();
					System.out.println("데이터 저장함");
				}
				
				pstmt.close(); // 다 썼으니깐 닫기 
			}
		} catch (Exception ex) {
			JOptionPane.showMessageDialog(null, 
					"파일 형식이 잘못되었거나 중복값이 있습니다.", "Error",
					JOptionPane.ERROR_MESSAGE);
		}
	}


}
